# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Build mozglue as a shared lib on Windows, OSX.
# If this is ever changed, update MOZ_SHARED_MOZGLUE in browser/installer/Makefile.in
if CONFIG['OS_TARGET'] in ('WINNT', 'Darwin'):
    SharedLibrary('mozglue')
else:
    Library('mozglue')

SDK_LIBRARY = True

if CONFIG['MOZ_ASAN']:
    SOURCES += ['AsanOptions.cpp']

if CONFIG['OS_TARGET'] == 'WINNT':
    DEFFILE = 'mozglue.def'
    # We'll break the DLL blocklist if we immediately load user32.dll
    # For the same reason, we delayload these other DLLs to avoid eager
    # dependencies on user32.dll.
    DELAYLOAD_DLLS += [
        'dbghelp.dll',
        'user32.dll',
        'version.dll',
    ]

if not CONFIG['JS_STANDALONE']:

    if CONFIG['MOZ_MEMORY'] and FORCE_SHARED_LIB:
        pass
        # TODO: SHARED_LIBRARY_LIBS go here
    else:
        # Temporary, until bug 662814 lands
        NO_VISIBILITY_FLAGS = True
        SOURCES += ['dummy.cpp']

    if CONFIG['OS_TARGET'] == 'WINNT':
        LOCAL_INCLUDES += ['/memory/build']
        SOURCES += ['WindowsDllBlocklist.cpp']
        DISABLE_STL_WRAPPING = True
        OS_LIBS += ['version']

    EXPORTS.mozilla += [
        'arm.h',
        'mips.h',
        'SSE.h',
        'WindowsDllBlocklist.h',
    ]

    if CONFIG['CPU_ARCH'].startswith('x86'):
        SOURCES += ['SSE.cpp']

    if CONFIG['CPU_ARCH'] == 'arm':
        SOURCES += ['arm.cpp']

    if CONFIG['CPU_ARCH'].startswith('mips'):
        SOURCES += ['mips.cpp']

    if CONFIG['MOZ_LINKER']:
        USE_LIBS += ['zlib']

USE_LIBS += ['mfbt']

DEFINES['IMPL_MFBT'] = True
LIBRARY_DEFINES['MOZ_HAS_MOZGLUE'] = True

LDFLAGS += CONFIG['MOZ_GLUE_WRAP_LDFLAGS']

if CONFIG['OS_TARGET'] == 'Darwin':
    # On OSX 10.10.3, a dead lock happens in some cases involving dynamic
    # symbol resolution for symbols that jemalloc itself uses. While it
    # might be possible to find a way to avoid all such symbol resolutions,
    # it's currently not possible because at the very least there's a call
    # to pthread_self from tsd_init_check_recursion, which is necessary
    # because somehow clang doesn't want to accept the __thread keyword
    # for TLS.
    LDFLAGS += ['-Wl,-bind_at_load']

DIST_INSTALL = True
